<?php
class DB {
    private $conn;

    // 构造函数，传入数据库连接对象
    public function __construct($conn) {
        $this->conn = $conn;
    }

    /**
     * 执行原生 SQL 查询
     * @param string $sql SQL 查询语句
     * @return mixed 查询结果或布尔值
     */
    public function execute($sql) {
        $result = $this->conn->query($sql);
        if ($this->conn->error) {
            throw new Exception("执行失败: " . $this->conn->error);
        }
        return $result;
    }

    /**
     * 查询操作
     * @param string $sql SQL 查询语句
     * @return array 查询结果数组
     */
    public function query($sql) {
        $result = $this->execute($sql);
        $rows = [];
        if ($result) {
            while ($row = $result->fetch_assoc()) {
                $rows[] = $row;
            }
            $result->free();
        }
        return $rows;
    }

    /**
     * 插入操作
     * @param string $sql 插入语句
     * @return int 插入的 ID
     */
    public function insert($sql) {
        $this->execute($sql);
        return $this->conn->insert_id;
    }

    /**
     * 更新操作
     * @param string $sql 更新语句
     * @return int 影响的行数
     */
    public function update($sql) {
        $this->execute($sql);
        return $this->conn->affected_rows;
    }

    /**
     * 删除操作
     * @param string $sql 删除语句
     * @return int 影响的行数
     */
    public function delete($sql) {
        $this->execute($sql);
        return $this->conn->affected_rows;
    }

    /**
     * 开始事务
     */
    public function beginTransaction() {
        $this->conn->begin_transaction();
    }

    /**
     * 提交事务
     */
    public function commit() {
        $this->conn->commit();
    }

    /**
     * 回滚事务
     */
    public function rollback() {
        $this->conn->rollback();
    }
}